<?php
/**
 * カレンダー
 */
require_once __DIR__ . '/../CalendarController.php';
require_once APPLICATION_PATH . '/models/Staff/StaffController.php';
require_once APPLICATION_PATH . '/controllers/StaffController.php';

/**
 * カレンダー
 * @author hariushi
 *
 */
class Models_Calendar_Xml_Controller extends Models_Calendar_Controller
{
	/**
	 * カレンダー
	 */
	public function __construct($yyyymm='')
	{
		parent::__construct();

		/*** データファイル月生成 */
		if ($yyyymm == '') {
			$yyyymm = $this->_getYYYYMM();
		}

		$accountFolderName = $this->_getFolder();
		$folderName = __DIR__ . '/databox/' . $accountFolderName;
		/*** アカウントフォルダー指定でフォルダーが未作成の場合、フォルダーを作成する */
		if ($accountFolderName != '') {
			/*** アカウントフォルダーがない */
			if (!file_exists($folderName)){
				/*** スタッフアカウント限定 */
				if (StaffController::isLogined()) {
					mkdir($folderName);
				}
			}
		}

		$strFileName = $folderName . $yyyymm . '.xml';
		$this->loadFromFile($strFileName, array(self::KEY_LIST));
		if ( $this->bErrorExists === TRUE) {
			return;
		}
		$this->sort();
	}

	/**
	 * HTTPリクエストの年月から該当するデータファイルのファイル名を編集する
	 */
	protected function _getYYYYMM()
	{
		$objRequest = new Lib_Request_DateTime();
		$sResult = $objRequest->getYear().sprintf('%02d',$objRequest->getMonth());
		return $sResult;
	}

	/**
	 * ファイル名から保存データ月を返す
	 */
	public function getMonthFromFileName()
	{
		$sFileName = $this->_strFileName;
		$sBaseName = basename($sFileName, '.xml');
		/*** 数字判定 */
		if (!is_numeric($sBaseName)) {
			return '';
		}
		/*** 桁数判定 */
		if (strlen($sBaseName) != strlen('YYYYMM')){
			return '';
		}

		$sMonth = substr($sBaseName, 4, 2);
		$iMonth = sprintf('%d', $sMonth);
		/***月論理判定 */
		if ($iMonth < 1){
			return '';
		}
		/***月論理判定 */
		if ($iMonth > 12) {
			return '';
		}

		return $iMonth;
	}

	/**
	 * ファイル名から保存データ年を返す
	 */
	public function getYearFromFileName()
	{
		$sFileName = $this->_strFileName;
		$sBaseName = basename($sFileName, '.xml');
		/*** 数字判定 */
		if (!is_numeric($sBaseName)) {
			return '';
		}
		/*** 桁数判定 */
		if (strlen($sBaseName) != strlen('YYYYMM')){
			return '';
		}
		$iYear = substr($sBaseName, 0, 4);

		return $iYear;
	}
}